﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace LI4.Data
{
    class Candidato
    {
        private Ligacao ligacao;

        public Candidato()
        {
            ligacao = new Ligacao();
        }

        public int inserirCandidato(Business.Candidato cand)
        {
            int success;
            Data.Login login = new Data.Login();
            if (!login.existeLogin(cand.Login.Username))
            {
                try
                {
                    login.inserir(cand.Login);
                    ligacao.Update("INSERT [dbo].[Candidatos] ( [username], [nome], [rua], [cod_postal], [telefone], [mail], [curriculum], [situacao], [cod_localidade]) VALUES (N'" + cand.Login.Username + "',N'" + cand.Nome + "',N'" + cand.Rua + "',N'" + cand.CodPostal + "'," + cand.Telefone + ",N'" + cand.Mail + "','" + cand.Curriculum + "'," + cand.Situacao + "," + cand.Localidade.CodLocalidade + ")");
                    success = Ligacao.OK;
                }
                catch
                {
                    success = Ligacao.DBERROR;
                }
                return success;

            }
            else
                return Business.Login.BADLOGIN;
        }

        public int updateCandidatoNovo(Business.Candidato cand, string antUsername)
        {
            SqlParameter[] paramts = new SqlParameter[13];

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", cand.Login.Username);
            paramts[2] = new SqlParameter("@nome", cand.Nome);
            paramts[3] = new SqlParameter("@rua", cand.Rua);
            paramts[4] = new SqlParameter("@cod_postal", cand.CodPostal);
            paramts[5] = new SqlParameter("@telefone", cand.Telefone);
            paramts[6] = new SqlParameter("@mail", cand.Mail);
            paramts[7] = new SqlParameter("@curriculum", cand.Curriculum);
            paramts[8] = new SqlParameter("@situacao", cand.Situacao);
            paramts[9] = new SqlParameter("@cod_localidade", cand.Localidade.CodLocalidade);
            paramts[10] = new SqlParameter("@antUsername", antUsername);
            paramts[11] = new SqlParameter("@password", cand.Login.Password);
            paramts[12] = new SqlParameter("@tipo",cand.Login.Tipo);

            
            ligacao.runProcedure("dbo.updateCandidato", paramts);

            int returnValue = (int)ligacao.mySqlCommand.Parameters["@return_value"].Value;

            Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + returnValue);
            return 0;
        }


        
        public int update(Business.Candidato cand,string antUsername)
        {
            Data.Login login = new Data.Login();
            
            if (cand.Login.Username.Equals(antUsername))
            {
                try
                {
                    ligacao.Update("UPDATE [dbo].[Candidatos] SET nome='" + cand.Nome + "', rua='" + cand.Rua + "',cod_postal='" + cand.CodPostal + "', telefone=" + cand.Telefone + ",mail='" + cand.Mail + "',curriculum='" + cand.Curriculum + "', situacao=" + cand.Situacao + ",cod_localidade=" + cand.Localidade.CodLocalidade + " where username='" + antUsername + "'");
                    login.update(cand.Login, antUsername);
                    return Ligacao.OK;
                }
                catch
                {
                    return Ligacao.DBERROR;
                }
                
            }
            else
            {
                if (!login.existeLogin(cand.Login.Username))
                {
                    try
                    {
                        login.update(cand.Login, antUsername);
                        ligacao.Update("UPDATE [dbo].[Candidatos] SET username='" + cand.Login.Username + "', nome='" + cand.Nome + "', rua='" + cand.Rua + "',cod_postal='" + cand.CodPostal + "', telefone=" + cand.Telefone + ",mail='" + cand.Mail + "',curriculum='" + cand.Curriculum + "', situacao=" + cand.Situacao + ",cod_localidade=" + cand.Localidade.CodLocalidade + " where username='" + antUsername + "'");
                        return Ligacao.OK;
                    }
                    catch
                    {
                        return Ligacao.DBERROR;
                    }
                }
                else
                    return Business.Login.BADLOGIN;
            }
        }
        public void Remover(Candidato c)
        {

        }
        public Business.Candidato getCandidato(string username)
        {
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade() ;

            Business.Candidato cand = new LI4.Business.Candidato();
            Business.Login login = new LI4.Business.Login(log.getLogin(username));
            Business.Localidade local;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Candidatos where username='" + username + "';");

            reader = ligacao.mySqlDataReader;
            if (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string curriculum = reader.GetString(6);
                int situacao = reader.GetInt32(7);
                int cod_local = reader.GetInt32(8);
                
                reader.Close();

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));

                cand = new LI4.Business.Candidato(nome,rua,cod_postal,mail,curriculum,situacao,telefone,local,login);
                
            }
            
            reader.Close();

            return cand;
        }

        public bool exiteCandidato(string username)
        {
            SqlDataReader reader;

            ligacao.Select("SELECT username FROM Candidatos where username='" + username + "';");
            reader = ligacao.mySqlDataReader;
            bool existe = reader.Read();
            reader.Close();

            return existe;
        }

        public int inserirCandidatoCurso(string username, int cod_curso)
        {
            int success;
            try
            {
                ligacao.Update("INSERT [dbo].[cursos_inscritos] ( [cod_curso], [username]) VALUES ('" + cod_curso + "','" + username + "')");
                success = Ligacao.OK;
            }
            catch
            {
                success = Ligacao.DBERROR;
            }
            return success;
        }
    }
}
